﻿//Lưu mã khóa học hiện tại
var maKhoaHoc;
//Lưu mã nhóm quyền hiện tại
var maNhomQuyenHienTai;

$(function () {
    //Hiển thị menu
    hienThiMenu('menu-khoahoc-' + maKhoaHoc);

    layDuLieu();

    khoiTaoXuLy();
});


/*
    Lấy dữ liệu
*/
function layDuLieu() {
    layDanhSachQuyen();
    layDanhSachNhomQuyen();
}

//Khởi tạo xử lý
function khoiTaoXuLy() {
    //Xử lý thêm nhóm quyền
    $('#them-nhom-quyen').on('submit', function (e) {
        e = e || window.event;
        e.preventDefault();
        var tenNhomQuyen = this.elements[0].value;
        if (tenNhomQuyen == '') {
            alert('Chưa nhập tên nhóm quyền');
            return;
        }
        _ajax(
            '/KhoaHoc_NhomQuyen/XuLyThemNhomQuyen',
            { maKhoaHoc: maKhoaHoc, tenNhomQuyen: tenNhomQuyen },
            'POST',
            'json',
            function (data) {
                if (data.trangThai == 'OK') {
                    themNhomQuyenThanhCong(data.ketQua);
                }
                else {
                    thongBaoLoi(data.trangThai);
                }
            },
            thongBaoLoi,
            'danh-sach-nhom-quyen-tieu-de',
            'Quản lý quyền - Thêm nhóm quyền thất bại'
        );
    });

    //Biến để xác định 
    //Chuỗi tìm kiếm của input tìm thành viên
    //Mục đang chọn
    //Số lượng kết quả
    //Timeout (Dừng để hạn chế request tìm kiếm khi nhập liên tục)
    var chuoiTimKiem = '', mucDangChon, soLuong, timeOut;
    var $khungTimKiem = $('#them-thanh-vien'),
        $khungDanhSach = $('#danh-sach-tim-kiem'),
        $khungChua = $('#khung-danh-sach-thanh-vien');
    
    //Dùng để scroll
    var phamViNhinThay_Min, phamViNhinThay_Max, chieuCaoMuc;
    phamViNhinThay_Min = $khungChua.offset().top;
    phamViNhinThay_Max = phamViNhinThay_Min + $khungChua.height();
    
    //Xử lý ô thêm thành viên
    //Focus => ẩn list hiện tại
    $khungTimKiem.on('focus', function () {
        $('#danh-sach-thanh-vien').addClass('an');
        if ($khungTimKiem.val() == '') {
            $khungDanhSach.html('');
        }
    });
    //Focusout => hiện list hiện tại
    $khungTimKiem.on('focusout', function () {
        setTimeout(function () { $('#danh-sach-thanh-vien').removeClass('an') }, 500);
    });
    $khungTimKiem.on('keyup', function (e) {
        //Tìm kiếm
        if (chuoiTimKiem == this.value) {
            return;
        }
        chuoiTimKiem = this.value;

        clearTimeout(timeOut);
        timeOut = setTimeout(function () {
            _ajax(
                '/KhoaHoc_NhomQuyen/XuLyTimKiemDanhSachThanhVienKhongCuaNhomQuyen',
                { maKhoaHoc: maKhoaHoc, maNhomQuyen: maNhomQuyenHienTai, thongTin: chuoiTimKiem },
                'POST',
                'json',
                function (data) {
                    if (data.trangThai == 'OK') {
                        var html = "", ketQua = data.ketQua;
                        soLuong = ketQua.length
                        for (var i = 0; i < soLuong; i++) {
                            html +=
                                '<li data-value="' + ketQua[i].ma + '">' +
                                    '<span>' + ketQua[i].hoTen + '</span>' +
                                '</li>';
                        }

                        //Hiển thị và set sự kiện
                        $khungDanhSach.html(html).find('li').on('mouseover', function (e) {
                            e = e || window.event;
                            diChuyen(mucDangChon, mucDangChon = $(e.target).parent().index() + 1);
                        }).on('click', function () {
                            chon();
                        });

                        //Chọn nút đầu tiên
                        mucDangChon = 1;
                        $khungDanhSach.find('li:nth-child(1)').addClass('chon');
                    }
                    else {
                        thongBaoLoi(data.trangThai);
                    }
                },
                thongBaoLoi,
                'danh-sach-thanh-vien-tieu-de',
                'Quản lý quyền - Tìm kiếm thành viên'
            )
        }, 500);
    });
    $khungTimKiem.on('keydown', function (e) {
        e = e || window.event;
        switch (e.keyCode) {
            case 38:
                //Lên
                e.preventDefault();
                //Nếu không nằm trên cùng
                if (mucDangChon > 1) {
                    diChuyen(mucDangChon, --mucDangChon);
                }
                break;
            case 40:
                //Xuống
                e.preventDefault();
                //Nếu không nằm dưới cùng
                if (mucDangChon < soLuong) {
                    diChuyen(mucDangChon, ++mucDangChon);
                }
                break;
            case 13:
                //Enter => Thêm thành viên
                e.preventDefault();
                chon();
                break;
            case 27:
                //Esc
                e.preventDefault();
                $khungTimKiem.focusout();
                break;
            default:
                break;
        }
    });
    //Di chuyển mục được chọn
    function diChuyen(cu, moi) {
        $khungDanhSach.find('li:nth-child(' + cu + ')').removeClass('chon');
        var top = $khungDanhSach.find('li:nth-child(' + moi + ')').addClass('chon').offset().top;
        var height = $khungDanhSach.find('li').height();

        //Kiểm tra để scroll
        if (top < phamViNhinThay_Min) {
            $khungChua.scrollTop($khungChua.scrollTop() - (phamViNhinThay_Min - top));
        }
        else if (phamViNhinThay_Max - height < top) {
            $khungChua.scrollTop($khungChua.scrollTop() + (top - phamViNhinThay_Max + height));
        }
    }
    //Chọn mục đang được chọn
    function chon() {
        var maThanhVien = $khungDanhSach.find('li:nth-child(' + mucDangChon + ')').attr('data-value');
        var tenThanhVien = $khungDanhSach.find('li:nth-child(' + mucDangChon + ') > span').text();
        $khungTimKiem.focusout().val('');

        _ajax(
                '/KhoaHoc_NhomQuyen/XuLyThemThanhVienVaoNhomQuyen',
                { maKhoaHoc: maKhoaHoc, maNhomQuyen: maNhomQuyenHienTai, maThanhVien: maThanhVien },
                'post',
                'text',
                function (data) {
                    if (data == 'OK') {
                        var dangOMucThanhVien = $('.muc-nhom-quyen.thanh-vien').attr('data-value') == maNhomQuyenHienTai;

                        var $html = 
                            $('<li data-value="' + maThanhVien + '">' +
                                (dangOMucThanhVien ? '' : '<i class="pe-7s-close"></i>') +
                                '<span>' + tenThanhVien + '</span>' +
                            '</li>');
                        
                        if (!dangOMucThanhVien)
                        {
                            $html.find('i').click(function () {
                                if (!confirm('Bạn có chắc muốn xóa thành viên khỏi nhóm quyền?')) {
                                    return;
                                }

                                var $obj = $(this).parent();

                                _ajax(
                                        '/KhoaHoc_NhomQuyen/XuLyXoaThanhVienKhoiNhomQuyen',
                                        { maKhoaHoc: maKhoaHoc, maNhomQuyen: maNhomQuyenHienTai, maThanhVien: $obj.attr('data-value') },
                                        'post',
                                        'text',
                                        function (data) {
                                            if (data == 'OK') {
                                                tatDoiTuong_Cao($obj);
                                            }
                                            else {
                                                thongBaoLoi(data);
                                            }
                                        },
                                        thongBaoLoi,
                                        'danh-sach-thanh-vien-tieu-de',
                                        'Quản lý quyền - Xóa thành viên khỏi nhóm quyền'
                                    );
                            });
                        }

                        $('#danh-sach-thanh-vien').prepend($html);
                    }
                    else {
                        thongBaoLoi(data);
                    }
                },
                thongBaoLoi,
                'danh-sach-thanh-vien-tieu-de',
                'Quản lý quyền - Thêm thành viên vào nhóm quyền'
            );
    }
}

function themNhomQuyenThanhCong(html) {
    $('#danh-sach-nhom-quyen').append(khoiTaoDanhSachNhomQuyen($(html)));
    $('#them-nhom-quyen')[0].reset();
}

/*
    Danh sách quyền
*/
function layDanhSachQuyen() {
    _ajax(
        '/Quyen/QuanLyQuyen_DanhSachQuyen',
        null,
        'POST',
        'json',
        function (data) {
            if (data.trangThai == 'OK') {
                taoDanhSachQuyen(data.ketQua);
            }
            else {
                thongBaoLoi(data.trangThai);
            }
        },
        thongBaoLoi,
        'danh-sach-quyen-tieu-de',
        'Quản lý quyền - Lấy danh sách quyền thất bại'
    );
}
function taoDanhSachQuyen(html) {
    $('#danh-sach-quyen').html(khoiTaoDanhSachQuyen($(html)));
}

function khoiTaoDanhSachQuyen(html) {
    $(html).find('input').on('change', function () {
        _ajax(
            '/KhoaHoc_NhomQuyen/XuLyCapNhatQuyen',
            { maNhomQuyen: maNhomQuyenHienTai, maQuyen: this.value, them: this.checked },
            'POST',
            'text',
            function (data) {
                if (data != 'OK') {
                    thongBaoLoi(data);
                }
            },
            thongBaoLoi,
            'danh-sach-quyen-tieu-de'
        );
    });
    return html;
}

/*
    Danh sách nhóm quyền
*/
function layDanhSachNhomQuyen() {
    _ajax(
        '/KhoaHoc_NhomQuyen/XuLyLayDanhSachNhomQuyen',
        { maKhoaHoc: maKhoaHoc },
        'POST',
        'json',
        function (data) {
            if (data.trangThai == 'OK') {
                hienThiDanhSachNhomQuyen(data.ketQua);
            }
            else {
                thongBaoLoi(data.ketQua);
            }
        },
        thongBaoLoi,
        'danh-sach-nhom-quyen-tieu-de',
        'Quản lý quyền - Lấy danh sách nhóm quyền thất bại'
    )
}

function hienThiDanhSachNhomQuyen(html) {
    $('#danh-sach-nhom-quyen').append(khoiTaoDanhSachNhomQuyen($(html))).find('.khach > span').click();
}

function khoiTaoDanhSachNhomQuyen(html) {
    var $khungDanhSachNhomQuyen = $('#danh-sach-nhom-quyen');
    var mucDangChon = 0;
    //Xử lý khi nhấn vào nhóm quyền
    $(html).find('span').on('click', function () {
        //Xóa giá trị khung tìm kiếm
        $('#them-thanh-vien').val('');

        var $obj = $(this).parent();
        //Cập nhật mục chọn        
        $khungDanhSachNhomQuyen.find('li:nth-child(' + mucDangChon + ')').removeClass('chon');
        mucDangChon = $obj.index() + 1;
        $khungDanhSachNhomQuyen.find('li:nth-child(' + mucDangChon + ')').addClass('chon');

        maNhomQuyenHienTai = $obj.attr('data-value');

        //Ẩn ô add nếu là khách
        if ($obj.hasClass('khach')) {
            $('#khung-thanh-vien').hide();
            document.getElementById('permit-function-1').disabled = false;
        }
        else {
            $('#khung-thanh-vien').show();
            document.getElementById('permit-function-1').disabled = true;
        }

        //Lấy quyền của nhóm quyền
        _ajax(
            '/KhoaHoc_NhomQuyen/XuLyLayChuoiMaQuyen',
            { maNhomQuyen: maNhomQuyenHienTai },
            'POST',
            'json',
            function (data) {
                if (data.trangThai == 'OK') {
                    mangCheckbox = document.getElementById('danh-sach-quyen').getElementsByTagName('input');
                    for (var i = 0; i < mangCheckbox.length; i++) {
                        mangCheckbox[i].checked = data.ketQua.indexOf('|' + mangCheckbox[i].getAttribute('value') + '|') != -1;
                    }
                }
                else {
                    thongBaoLoi(data.ketQua);
                }
            },
            thongBaoLoi,
            'danh-sach-quyen-tieu-de',
            'Quản lý quyền - lấy thông tin nhóm quyền thất bại'
        );
        //Lấy thành viên của quyền
        _ajax(
            '/KhoaHoc_NhomQuyen/XuLyLayDanhSachThanhVienCuaNhomQuyen',
            { maNhomQuyen: maNhomQuyenHienTai },
            'POST',
            'json',
            function (data) {
                if (data.trangThai == 'OK') {
                    //Khởi tạo
                    $html = $(data.ketQua);

                    //Nếu là nhóm thành viên => ko được xóa
                    if ($obj.hasClass('thanh-vien')) {
                        $html.find('i').remove();
                    }
                    else {
                        $html.find('i').click(function () {
                            if (!confirm('Bạn có chắc muốn xóa thành viên khỏi nhóm quyền?')) {
                                return;
                            }

                            var $obj = $(this).parent();

                            _ajax(
                                    '/KhoaHoc_NhomQuyen/XuLyXoaThanhVienKhoiNhomQuyen',
                                    { maKhoaHoc: maKhoaHoc, maNhomQuyen: maNhomQuyenHienTai, maThanhVien: $obj.attr('data-value') },
                                    'post',
                                    'text',
                                    function (data) {
                                        if (data == 'OK') {
                                            tatDoiTuong_Cao($obj);
                                        }
                                        else {
                                            thongBaoLoi(data);
                                        }
                                    },
                                    thongBaoLoi,
                                    'danh-sach-thanh-vien-tieu-de',
                                    'Quản lý quyền - Xóa thành viên khỏi nhóm quyền'
                                );
                        });
                    }

                    $('#danh-sach-thanh-vien').html($html);
                }
                else {
                    thongBaoLoi(data.trangThai);
                }
            },
            thongBaoLoi,
            'danh-sach-thanh-vien-tieu-de'
        );
    });

    //Xử lý nút xóa
    $(html).find('i').on('click', function () {
        if (!confirm('Bạn có chắc là muốn xóa nhóm quyền này?')) {
            return;
        }

        var $obj = $(this);        
        _ajax(
            '/KhoaHoc_NhomQuyen/XuLyXoaNhomQuyen',
            { maNhomQuyen: $obj.parent().attr('data-value') },
            'POST',
            'text',
            function (data) {
                if (data == 'OK') {
                    tatDoiTuong($obj.parent()[0], { 'opacity': 0 }, { 'width': 0, 'margin-right': 0 } );
                }
                else {
                    thongBaoLoi(data);
                }
            },
            thongBaoLoi,
            'danh-sach-nhom-quyen-tieu-de',
            'Quản lý quyền - Xóa nhóm quyền thất bại'
        );
    });
    return html;
}